package com.healthy.service.impl;

import java.security.GeneralSecurityException;
import java.util.List;
import java.util.Random;
import java.util.Set;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSONObject;
import com.healthy.entity.YgAdmins;
import com.healthy.entity.YgColumn;
import com.healthy.entity.YgUsers;
import com.healthy.entity.YgWallet;
import com.healthy.mapper.YgUsersMapper;
import com.healthy.mapper.YgWalletMapper;
import com.healthy.service.YgUsersService;
import com.healthy.util.MailUtil;
import com.healthy.util.QQMailUtil;

/**
 * service层实现类
 * @author HGB丶阳光
 *
 */
@Service
@Transactional
public class YgUsersServiceImpl implements YgUsersService {

	@Autowired
	private YgUsersMapper ygUsersMapper;
	
	@Autowired
	private YgWalletMapper ygWalletMapper;
	
	// 用户模块功能1、普通用户登录功能
	@Override
	public YgUsers userLogin(String username, String Password) {
		YgUsers user = ygUsersMapper.userLogin(username, Password);
		if(user != null){
			return user;
		}else{
			return null;
		}
	}
	//service层：功能1结束**************************
	
	// 用户模块功能2、普通用户账号注销
	@Override
	public boolean userDelete(String uuid) {
		return this.ygUsersMapper.userDelete(uuid);
	}
	//service层：功能2结束**************************	
	
	
	// 用户模块功能3、普通用户注册功能
	@Override
	
	// JSR 303 方式效验信息
	public boolean userRegisters(YgUsers users){
		return this.ygUsersMapper.userRegisters(users);
    }
	
	// 正则表达式方式效验信息
	public boolean userRegister(String username,String password,String nickname,String mobile,String email,String sex){
		return this.ygUsersMapper.userRegister(username,password,nickname,mobile,email,sex);
	}
	
	// 用户模块功能3、普通用户注册功能 -> 判断用户名是否已存在
	@Override
	public YgUsers findUsersName(String username) {
		return this.ygUsersMapper.findUsersName(username);
	}
	
	// 用户模块功能3、普通用户注册功能 -> 验证用户当前邮箱是否存在
		@Override
		public YgUsers findUsersEmail(String email) {
			return this.ygUsersMapper.findUsersEmail(email);
		}
	// 用户账号注册邮箱验证码发送：outEmailVerification	
		@Override
		public String registeroutEmailVerification(String email,HttpSession session) {
			System.out.println("用户邮箱信息测试："+email);
			//生成验证码（6为随机数）
			int random = new Random().nextInt(999999);
			String registerVerification = "YG"  + random;
			session.setAttribute("registerVerification",registerVerification);
			//调用QQEmailUtil实体类中方法,出入当前用户的信息
			try{
				if(email != null){
					String title = "YG平台账号注册验证码";
					String content = "YG平台账号注册验证码,当前验证码为： "+registerVerification;
					QQMailUtil.sendMailEmail(title,content,email);
				}else{
					return "当前邮箱不存在";
				}
			}catch(Exception e){
				System.out.println("邮件发送异常："+e.getMessage());
				e.printStackTrace();
			}
			return null;
		}
		
		// 用户注册，初始化钱包余额
		@Override
		public boolean initUserWallet(String user_id) {
			return this.ygWalletMapper.initUserWallet(user_id) > 0;
		}
		
	//service层：功能3结束**************************	
	
		/*
		 * 用户功能四，测试邮箱发送功能
		 * 2020-6-11
		 * 二、调用方法进行发送邮件
		 */
		public String sendOutEmail(YgUsers users,HttpSession session){
			//生成一个6位随机数	            
			int radom = new Random().nextInt(999999);
			String verification = "YG"  + radom;
			session.setAttribute("verification",verification);
		//	System.out.println("str:"+str);
			// 激活码由email产生
					//String validateCode = MD5Util.encode2hex(student.getEmail());
			//		System.out.println("测试processRegister方法中的user邮箱："+users.getEmail());
					// 发送邮件
//					StringBuffer sb = new StringBuffer("通过邮箱找回密码成功，请尽快登录账号进行修改密码！</br>");
//					sb.append("<a href=\"http://localhost:8080/springhibernateweb/activeStudent?email=").append(users.getEmail())
//							.append("\">账户密码为："+users.getPassword()).append("</a>");
					StringBuffer sb = new StringBuffer("用户账号注销,</br> 当前用户："+users.getUsername()+",验证码为 :"+verification);
//					sb.append("<a href=\"http://localhost:8080/TourPlatform/loginregister.jsp")
//							.append("\">点击进行进行账号注销").append("</a>");
					MailUtil.send(users.getEmail(), sb.toString());
				//	student.setValidate_code(validateCode);
				//	student.setPassword(MD5Util.encode2hex(student.getPassword()));// 密码加密
//					saveStudent(user); //添加用户
					return null;
				}
	// service层：功能四结束**************************

		
	/*
	 * 用户功能五，测试QQ邮箱发送功能 2020-6-11 用于账号密码找回
	 */
	@Override
	public String findPassowrd(YgUsers users) {
		System.out.println("用户信息测试："+users);
		//调用QQEmailUtil实体类中方法,出入当前用户的信息
		try{
			if(users != null){
				String title = "YG平台账号密码找回";
				String content = "YG平台账号密码找回，当前账号："+users.getUsername()+" 密码为： "+users.getPassword();
				QQMailUtil.sendMail(title,content,users);
			}else{
				return "当前用户不存在";
			}
		}catch(Exception e){
			System.out.println("邮件发送异常："+e.getMessage());
			e.printStackTrace();
		}
		
		return null;
	}
	// service层：功能五结束**************************

	
	/*
	 * 用户功能六，账号密码的找回，测试当前用户输入的账号与邮箱是否正确；
	 */
	@Override
	public YgUsers findYgUsersByUsernameAndEmail(String email) {
		return this.ygUsersMapper.findYgUsersByUsernameAndEmail(email);
	}
	// service层：功能六结束**************************

	/*
	 * 用户功能七，账号密码修改，将 二次MD5码加密旧密码 与数据库中 二次MD5码加密旧密码 进行查询
	 */
	@Override
	public YgUsers findUsersPassword(String id,String password) {
		return this.ygUsersMapper.findUsersPassword(id,password);
	}
	// 用户功能七，账号密码修改，执行修改密码
	@Override
	public boolean UsersUpdatePassword(String x1_password,String username) {
		return this.ygUsersMapper.UsersUpdatePassword(x1_password,username);
	}
	// service层：功能七结束**************************

	/*
	 * 用户功能八，通过用户id查询用户
	 */
	@Override
	public YgUsers findUserById(String user_id) {
		return this.ygUsersMapper.findUserById(user_id);
	}

	/*
	 * 用户功能九，用户修改个人信息
	 */
	@Override
	public boolean UpdateUserInfo(String id,String nickname, String mobeil, String sex, String u_img) {
		return this.ygUsersMapper.UpdateUserInfo(id,nickname,mobeil,sex,u_img);
	}

	/*
	 * 用户功能十，用户查看自己全部专栏，以及该专栏下的全部收藏的文章
	 */
	@Override
	public List<YgUsers> findColumnAll(String uid) {
		return this.ygUsersMapper.findColumnAll(uid);
	}

	/*
	 * 用户功能十一，用户查看自己全部专栏
	 */
	@Override
	public List<YgColumn> AllColumn(String uid) {
		return this.ygUsersMapper.AllColumn(uid);
	}

	

	

	
	
	
	
	
	
}
